#include<bits/stdc++.h>
using namespace std;
const int N=2e3+5;
struct AC{
	int son[26],fail;
}t[N];
int n,cnt=1,dp[N],pd[N],ans;
string s,tt;
queue<int> q;
vector<int> e[N][26];
void insert(string s){
	int u=1;
	for(int i=0,len=s.length();i<len;i++){
		int v=s[i]-'a';
		if(!t[u].son[v]) t[u].son[v]=++cnt;
		u=t[u].son[v];
	}
}
void get_fail(){
	for(int i=0;i<26;i++) t[0].son[i]=1;
	t[1].fail=0;
	q.push(1);
	while(!q.empty()){
		int u=q.front();q.pop();
		for(int i=0;i<26;i++){
			int v=t[u].son[i],f=t[u].fail;
			if(!v){t[u].son[i]=t[f].son[i];continue;}
			t[v].fail=t[f].son[i];
			q.push(v);
		}
	}
}
signed main() {
	freopen("neck.in","r",stdin);
	freopen("neck.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>s>>tt;
	insert(tt),get_fail();
	for(int i=1;i<cnt;i++)
		for(int j=0;j<26;j++) e[t[i].son[j]][j].push_back(i);
	for(int i=0,ls=s.length();i<ls;i++){
		int ch=s[i]-'a';
		for(int j=1;j<cnt;j++) pd[j]=dp[j];
		for(int j=1;j<cnt;j++)
			for(auto v:e[j][ch])
				pd[j]=max(pd[j],dp[v]+1);
		for(int j=1;j<cnt;j++) dp[j]=pd[j],ans=max(ans,dp[j]);
	}
	cout<<ans;
	return 0;
}
